Bewegungserkennung in Kinect-Skelettdaten mithilfe von Faltungsnetzen im Vergleich zu Rekurrenten Neuronalen Netzen

Einleitung

Ziel dieser Projektarbeit ist das erkennen mehrerer unterschiedlicher Bewegungsabläufe mithilfe von Faltungsnetzen. Hierbei wird das resultierende Modell direkt mit einem auf den gleichen Daten trainierten Rekurrenten Neuronalen Netz vrglichen. Bei den Verwendeten Daten handelt es sich um Skelettdaten einer Kinect v2. Konkret handelt es sich um den NTU RGB+D 120 Action Recognition Datasatz, der durch das ROSE Lab der Nanyang Technological University in Singapore zur Verfügung gestellt wurde. Untersucht wird ebenfalls der Einfluss von Daten Normalisierung und verschiedenster Modellstrukturen auf die Vorhersagegenauigkeit.

Der Aktuelle Stand der Forschung

Die verwenden Skelettdaten stehen als Sequenzen zur Verfügung. Somit ergeben sich 2 Eigenschaften der Daten, die berücksichtig werden müssen. Zum einen die in den Skelettdaten hinterlegten Gelenkpunkte sowi deren zusammenhänge. Zum anderen die Zeitliche abhängigkeit der dargestellten Aktion. Diese Eigenschaften haben in der Literatur zu 3 Ansätzen geführt. Zum einen läd die Sequenzstruktur mit der zeitlichen Dimension zur Nutzung Rekurrenter Neuronaler Netze mit einer Gedächtnis Funktion ein, wie siie aus NLP Anwendungen bekannt ist. Das Gedächtnis kann man sich in diesem Anwendungsfall vielmehr "visuell" vorstellen. Biespielhaft hierfür wäre die Arbeit "[ACTION RECOGNITION USING VISUAL ATTENTION](https://arxiv.org/pdf/1511.04119v3.pdf)" von Shikhar Sharma, Ryan Kiros & Ruslan Salakhutdinov. Eine Andere herangehensweise wäre die Nutzung einer zeitlichen und Räumlichen Faltung über die einzelnen Frames einer Sequenz hinweg. Die kann mit Faltungsnetzen aus der Bilderkennung verglichen werden. Hierbei wird jedoch nun über den Verlauf von Gelenkkordinaten statt über Farbkanäle und Pixelkoordinaten gefaltet. State of the art Modelle zur Bewegungsklassifizierung nutzen jedoch zusätzlich zu diesen beiden Faltungen eine weitere Eigenschaft der Skelettdaten. So werden die Skelette als Graphen interpretiert, welche die Zusammenhänge zwischen den einzelenen Gelenken beinhalten. So kann über eine Graphenfaltung die nicht nur die Bewegung der einzelnen Gelenke über Raum und Zeit berücksichtigt werden, sondern auch die Relation dieser Gelenke zueinandner. Ein gutes Beispiel für die Verwendung dieser 3 Faltungen liefert das Paper [Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition](https://https://arxiv.org/pdf/1801.07455v2.pdf) von Sijie Yan, Yuanjun Xiong und Dahua Lin des Department of Information Engineering der Chinese University of Hong Kong. Zu guter Letzt kann ein solches Netzt durch zusätzliche Attention Module, ähnlich wie sie in Rekurrenten Neuronalen Netzen vorkommen, erweitert werden. die so entstehenden Netz Architekturen führen derzeit die Rangliste der Begungsklassifizierung an. Die aktuell besten Resultate liefert dabei im durch Lei Shi, Yifan Zhang, Jian Cheng und Hanqing Lu in 2019 veröffentlichte Paper [Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition](https://arxiv.org/pdf/1912.06971v1.pdf) vorgestellt wird. In dieser Arbeit werden wir uns aus Gründen der Komplexität auf die räumliche und zeitliche Faltung beschränken.

Der Datensatz

Bei dem verwendeten Datensatz handelt es sich um den NTU RGB+D 120 Action Recognition Datasatz, des ROSE Lab der Nanyang Technological University in Singapore. Der Datensatz umfasst 120 Klassen mit insgesamt 114,480 Sequenzen. Konkret handelt es sich um Aufnahmne verschiedenster Länge welche mit unterschiedlichen Darstellern aus jeweils 3 verschiedenen Kamerawinkeln gleichzeitig aufgenommen wurden. Verwendet wurde dabei Kinect v2 Kameras. Enthalten sind für die Sequenzen sowohl RGB Videodaten als auch Tiefendaten, 3D Skelettdaten, und 3d infrarot Videos. die Auflösung der RGB Videos beträgt 1920x1080, für Tiefenbilder und Infrarot Videos 512x424. die Skelettdaten enthalten 3D koordinaten von 25 Gelenkpunkten in jedem Frame. Verwende werden in unserem Fall tatsächlich nur die Skelettdaten.

Die Aktionsklassen

Die Bewegungen, auf sich für diese Projektarbeit geeinigt wurde, sind die folgenden:

Die Restklasse setzt sich zu gleichen Teilena aus Sequenzen der folgenden Klassen zusammen:

Aufbau der Skelettdaten

Die 25 Gelenkpunkte, welche die Skelettdaten ausmachen, sind jeweils mit X,Y und Z Werten versehen und stellen folgende Körperpunkte dar:

Die Nummerierung der Keypoints ist die folgende:

Setup und Abhänigkeiten

Imports von Abhängigkeiten sowie Verbindung mit google Drive

Datenaufbereitung

Die Datenaufbereitung können wir in folgende Schritte einteilen:

  1. Festlegenen der Datenstruktur
  2. Labeln der Daten
  3. Normalisierung der Daten
  4. Padding der Daten
  5. Split der Trainings und Testdaten

Die Datenstruktur

Unsere Daten liegen als in Aktionsklassen unterteile Sequenzen vor. Jede Sequenz kann dabei in der Länge an Frames variieren. Ein einzelnes Frame enthält, wie bereits in der einleitung zum Datenset erläuert, 25 Gelenkpunkte mit jeweils 3 Koordinaten. Die Überlegte Datenstruktur sieht nun folgendermaßen aus:

Analog zu Bilddaten mit Kanälen für Rot, Grün und Blau stellen wir unsere Frames so auf, dass wir Kanäle für die X, Y und Z Koordinaten erhalten. Diese legen wir dann übereinander:

Die so entstehende Datenstruktur hat dann je nach Sequenzlänge eine dimensionalität von (n, 25, 3), wobei n unsere Sequenzlänge darstellt.

Labeln der Daten

Da unsere Daten in Aktionsklassen unterteilt vorliegen, wird jeder Aktionsklasse ein Index zugeteilt.

Normalisierung der Daten

Für unser Training unterscheiden wir 4 Fälle der Normalisierung:

Die Implementierung der verschiedenen Normalisierungen sind in den folgenen Codeblöcken zu sehen.

Padding der Sequenzen

Da unsere Sequenzen unterschiedliche Längen haben, stehen wir vor einem Problem. Für ein Faltungsnetz müssten alle unsere Sequenzen entweder die gleiche Länge haben, oder wir müssten die Sequenzen in Abschnitte gleicher Länge einteilen. Das Zurechtschneiden der Sequenzen hat jedoch einige Nachteile:

die einzig verbleibende Option wäre also, die Sequenzen alle auf eine Länge zu bringen. Wie genau dies umgesetzt werden kann, ohne die Modelle beim trainieren zu beeinträchtigen, lässt sich aus dem Paper [EFFECTS OF PADDING ON LSTMS AND CNNS](https://arxiv.org/pdf/1903.07288.pdf) von Dwarampudi Mahidhar Reddy und Subba Reddy herauslesen. Demnach hat das Padding auf Faltungsnetze keinerlei Einfluss. RNN's hingegen sind sehr anfällig gegenüber der Art des Paddings. Aus diesem Grund haben wir uns für ein Pre-Padding/Pre-Trimming entschieden, bei dem wir auf eine Länge von 170 Frames aufstocken oder runterkürzen. Die Begründung hiefür ist die mittlere Länge der Sequenzen in unseren ausgewählten Aktionsklassen. Dass vorne abgeschnitten wird statt hinten, lässt damit rechtfertigen, dass die Sequenzen eher im Mittleren bis hinteren Bereich ausgeübt werden.

Hilfsmethoden zur Darstellung der Skelettdaten nach Normalisierung

Methoden zu Normalisierung

Rotationsnormalisierung

Umsetzung der Rotationsnormalisierung.

Körperkoordinaten Normalisierung

Umsetzung der Normalisierung in ein eigenes Körperkoordinatensystem. Enthält 3 nennenswerte Methoden:

Allgemeine Hilfsmethoden zur vorbereitung der Trainingsdaten

Trainingsdaten Pipeline

Visualisierung der Normalisierung

Für unnormalisierte Daten

Als Animation:

für Normalisierte Daten

Als Animation:

für Advanced Normalized Daten

Als Animation:

für Rotations Normalisierte Daten

Als Animation

Cross View und Cross Subject Trainingsdaten

Die bisherigen Aufbereitungen der Trainingsdaten berücksichtigen keinen speziellen Anwendungsfall. Generell kann bei dem Training mit unseren Daten jedoch unter zwei Fällen unterschieden werden; Cross View und Cross Subject.

Cross View

Cross view ist allgemein der leichtere der beiden Fälle. Hierbei wird der Trainings und Validierungs-Split so ausgesucht, dass unser Modell auf zwei der drei Kameraansichten trainiert wird. Bei der Validierung muss das Modell nun die Bewegung aus der dritten Kameraansicht erkennen können.

Cross Subject

Cross Subject ist wiederum schwieriger. Hierbei wird sichergestellt, das im Trainings und Validierungsdatensatz die Aktionen/Bewegungen von unterschiedlichen Darstellern ausgeübt werden. so soll sichergestellt werden, das unser Modell gut generalisieren kann, und sich nicht an eigenheiten unserer Darsteller orientiert. Dieser Fall sit bei weitem schwieriger zu behandeln.

Wir werden bei der Evaluierung unserer Modelle diese beiden Fälle ebenfalls berücksichtigen und unser Modell separat mit entsprechenden Daten trainieren und auwerten.

Erstellen der Cross View / Cross Subject Trainingsdaten

Das Datenset wird mit vordefinierten Einteilungen für Cross View und Cross Subject zur Verfügung gestellt. Einzig die Restklasse muss noch zusammengestellt werden. Je nach Verwendungsbedarf müssen in den folgenden Blöcken entsprechende Codestellen auskommentiert / reaktiviert werden

Laden der Datensätze, falls sie bereits erstellt wurden:

Normalisieren der Daten:

Die Modelle

Bei der Architektur der Faltungsnetze werden 4 verschiedene Ansätze verfolgt. Diese Unterscheiden sich in erster Linie in der Form und Größe der Faltungskerne sowie in der Anzahl der Knoten im Fully Connected Layer.

Die verschiedenen Faltungskerne

Die Daten werden dem Modell in der bereits erläuterten Form übergeben. diese Erlaubt uns nun mehrere Möglichkeiten bei der Wahl der Faltungskerne. Allerdings gilt es in diesem Fall eine Besonderheiut zu beachten. Während bei der Bildverarbeitung eine Faltung über die verschiedenen Farbkanäle durchaus sinn macht, wäre dies in unserem Fall eher bedenklich. Eine Faltung über die räumlichen Koordinaten X,Y un Z eines Gelenkpunktes scheint wenig sinnvoll. Eine Faltung über die Koordinaten eines Gelenkespuunktes über mehrere Frames hinweg hingegen schon. Der in blauer Farbe markierte Faltungskern würde zum Beispiel über mehrere Frames hinweg die X Koordinaten falten, dann die Y und die Z Koordinaten. Der Rote Faltungskern würde sich nicht nur einen Gelenkpunkt beschränken sondern die Faltung über die Frames hinweg für alle Gelenkpunkte gleichzeitig durchführen.

Eine Faltung über mehrere Frames hinweg stellt eine Faltung über die Zeit hinweg, also eine Zeitfaltung. Da in unserem Fall keine Graphendarstellung der Gelenkpunkte vorliegt, ist eine Faltung einer kleinen Gruppe von Gelenkpunkten über die Zeit eher suboptimal, da der genaue Zusammenhang der Gelenke zueinander in den Daten nicht vorliegt. Deshalb haben wir nur die Wahl zwischen diesen beiden Arten voin Kernen.

  1. wir Falten jedes Gelenk individuel über die Zeit
  2. Wir Falten alle Gelenke zusammen über die Zeit

Welchen Faltungskern wir wählen, hängt stark von unsrer Bewegung ab. Sind bei einer Aktion alle Gelenkpunkte in Bewegung, so eignet sich eine Faltung über alle Punkte. Bewegt sich hingegen nur ein einziger Gelenkpunkt, so ist die Faltung über ein einziges Gelenk vorzuziehen.

Relevant ist auch die Anzahl der Faltungskerne. Sobald wir eine hohe Anzahl an Kernen voraussetzen liefert die Faltung über alle Gelenkpunkte theoretisch vergleichbare Resultate, jedoch mit dem Preis einer höheren Parameteranzahl.

Modell Architektur

Nachdem die Frage der Faltungskerne behandelt wurde, steht nun der Aufbau einer Netzarchitektur an. Hierbei wurden 4 mögliche Architekturen ausprobiert. Bei allen Netzen wird eine Glorot Normalverteilung zur Initialisierung der Parameter gewählt, sowie eine RELU als Aktivierungsfunktion. Als Optimizer dient der Adam Optimizer mit einem Cross Entropy Loss.

Modellentwurf 1

Das erste Modell setzt sich aus 2 Zeitfaltungen sowie 2 Pooling Layern zusammen. Die Faltung besteht dabei jeweils aus Zeitpfaltungen über einzelne Gelenkpunkte. Auch das Max Pooling wird nur auf individuellen Gelenken durchgeführt. Die Faltung findet jeweils über 5 Frames statt. Der Stride der Faltungskerne liegt bei 1, der des Polling Kerns bei 2 in der Breite (Über 2 Frames) und 1 in der Höhe (Immer nur ein Gelenk). Auf das Faltungsnetz folgen 4 fully connected Layer mit Dropout Schichten.

Netz Zusammenfassung:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_20 (Conv2D)            (None, 166, 25, 32)       512       
_________________________________________________________________
max_pooling2d_10 (MaxPooling) (None, 162, 25, 32)       0         
_________________________________________________________________
conv2d_21 (Conv2D)            (None, 158, 25, 32)       5152      
_________________________________________________________________
max_pooling2d_11 (MaxPooling) (None, 154, 25, 32)       0         
_________________________________________________________________
flatten_8 (Flatten)           (None, 123200)            0         
_________________________________________________________________
dense_36 (Dense)              (None, 100)               12320100  
_________________________________________________________________
dropout_12 (Dropout)          (None, 100)               0         
_________________________________________________________________
dense_37 (Dense)              (None, 50)                5050      
_________________________________________________________________
dropout_13 (Dropout)          multiple                  0         
_________________________________________________________________
dense_38 (Dense)              (None, 20)                1020      
_________________________________________________________________
dense_39 (Dense)              (None, 20)                420       
_________________________________________________________________
dense_40 (Dense)              (None, 4)                 84        
=================================================================
Total params: 12,332,338
Trainable params: 12,332,338
Non-trainable params: 0

Modellentwurf 2

Das zweite Modell setzt sich aus 3 Zeitfaltungen und Max-Pooling Layern zusammen. Die Faltungen und das Maxpooling finden wieder nur auf individuellen Gelenken statt. allerdings wurde die Faltung in der 2ten und 3ten Faltungsschicht von 5 auf 3 Frames reduziert. Die Pooling Layer wurden ebenfalls auf eine Breite von 2 Frames reduziert. Der Stride bleibt für die Faltung und das Pooling identisch zum ersten Modell.

Netz Zusammenfassung:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_22 (Conv2D)            (None, 166, 25, 32)       512       
_________________________________________________________________
max_pooling2d_12 (MaxPooling) (None, 165, 25, 32)       0         
_________________________________________________________________
conv2d_23 (Conv2D)            (None, 163, 25, 32)       3104      
_________________________________________________________________
max_pooling2d_13 (MaxPooling  (None, 162, 25, 32)       0         
_________________________________________________________________
conv2d_24 (Conv2D)            (None, 160, 25, 32)       3104      
_________________________________________________________________
max_pooling2d_14 (MaxPooling)  (None, 159, 25, 32)       0         
_________________________________________________________________
flatten_9 (Flatten)           (None, 127200)            0         
_________________________________________________________________
dense_41 (Dense)              (None, 100)               12720100  
_________________________________________________________________
dropout_14 (Dropout)          (None, 100)               0         
_________________________________________________________________
dense_42 (Dense)              (None, 50)                5050      
_________________________________________________________________
dropout_15 (Dropout)          multiple                  0         
_________________________________________________________________
dense_43 (Dense)              (None, 20)                1020      
_________________________________________________________________
dense_44 (Dense)              (None, 4)                 84        
=================================================================
Total params: 12,732,974
Trainable params: 12,732,974
Non-trainable params: 0

Modellentwurf 3

Das dritte Modell stellt einen kompletten Entwurfswechsel dar. die Faltungsschichten werden auf 2 reduziert:

  1. Der erste Faltungskern wird auf eine Breite von 10 Frames erhöht und faltet weiterhin auf individuellen Gelenken.
  2. Der Zweite Faltungskern faltet nun hingegen über alle Gelenke gleichzeitig. Er bekommt also eine Höhje von 25. Seine Breite wird auf 5 gesetzt, es wird also über 5 Frames gefaltet.

Auf Pooling Layer wird komplett verzichtet. Stattdessen wird der Stride für die Faltungskerne über die Frames hinweg auf 2 erhöht.

Die Idee dahinter ist simpel:

Dies sorgt für eine höhere Anzahl an Parametern in den Faltungsschichten. Auffällig in den vorherigen Modellen war die viel zu hohe Anzahl an Parametern, ausgelöst durch den zu großen Anteil an fully connected Layern. Dieser Anteil wird nun stark reduziert, da die Ausgabe der letzten Faltungsschicht um ein vielfaches verkleinert wurde.

Netz Zusammenfassung:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_25 (Conv2D)           (None, 81, 25, 32)        992       
_________________________________________________________________
conv2d_26 (Conv2D)           (None, 39, 1, 32)         128032    
_________________________________________________________________
flatten_10 (Flatten)         (None, 1248)              0         
_________________________________________________________________
dense_45 (Dense)             (None, 100)               124900    
_________________________________________________________________
dropout_16 (Dropout)         multiple                  0         
_________________________________________________________________
dense_46 (Dense)             (None, 50)                5050      
_________________________________________________________________
dense_47 (Dense)             (None, 20)                1020      
_________________________________________________________________
dense_48 (Dense)             (None, 20)                420       
_________________________________________________________________
dense_49 (Dense)             (None, 4)                 84        
=================================================================
Total params: 260,498
Trainable params: 260,498
Non-trainable params: 0

Modellentwurf 4

Da 4te und letzte Modell versucht, die im 3ten Modell verwendeten Ansätze weiter zu verbessern. So wird die Anzahl der Faltungsschiten wieder auf 3 erhöht:

  1. Das Layout der ersten Faltung bleibt identisch
  2. Die zweite Faltungsschicht ist eine verkleintere Version der ersten Schicht. Statt Über 10 Frames wird nur noch über 5 Frames gefaltet.
  3. Die 3te Schicht ist identisch zur 2ten Schicht des 3ten Modells

Das fully connected Netz wird im Vergleich zum 3ten Model um eine Schicht reduziert. Alles in allem wird die Parameteranzahl im Vergleich fast nochmal halbiert.

Netz Zusammenfassung:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_37 (Conv2D)           (None, 81, 25, 32)        992       
_________________________________________________________________
conv2d_38 (Conv2D)           (None, 39, 25, 16)        2576      
_________________________________________________________________
conv2d_39 (Conv2D)           (None, 18, 1, 32)         64032     
_________________________________________________________________
flatten_15 (Flatten)         (None, 576)               0         
_________________________________________________________________
dense_68 (Dense)             (None, 100)               57700     
_________________________________________________________________
dropout_23 (Dropout)         multiple                  0         
_________________________________________________________________
dense_69 (Dense)             (None, 50)                5050      
_________________________________________________________________
dense_70 (Dense)             (None, 20)                1020      
_________________________________________________________________
dense_71 (Dense)             (None, 4)                 84        
=================================================================
Total params: 131,454
Trainable params: 131,454
Non-trainable params: 0

Methoden zur Evaluierung

Für die Evaluierung der Netze wurde sich auf folgende Metriken festgelegt:

  1. Das Training der Modelle zielt auch die Accuracy Metrik. Bei unbalancierten Datensätzen wäre die Accuracy skeptischer zu betrachten. Da unsere Klassen gleich oft vertreten sind, stellt diese Metrikt keine Probleme dar.

  2. Die Konfusionsmatrix visualisiert ganz gut, mit welchen Aktionsklassen unsere Modelle Probleme haben. sie fasst gleichzeitig die Precision und den Recall für alle Klassen an.

  3. Die ROC curve, oder auch Receiver operating characteristic curve. diese Vergleicht für jede Klasse den Recall sowie die Sensitivity. Da wir nicht mit einem Binären Klassifikator arbeiten, verwenden wir für die ROC nur die Area Under Curve. Berechnet wird diese im Multiclass Fall durch den Mittelwert. Je näher dieser an 1 liegt, desto besser. Auch hier gilt: Da unsere Klassen balanciert sind, stellt der Mittelwert kein Problem dar.

  4. Der F-1 Score. Für jede Klasse wird zusätzlich noch aus Precision und Recall der F-1 Score berechnet. Dies dienst zusätzlich zur Konfusions Matrix dazu, die Vorhersagegenauigkeit des Modells bei einzelnen Klassen besser bewerten zu können. Der Mittelwert des F-1 Score stellt im übrigen eine gute Metrik für die Bewertung des Modells dar.

    Berechnet werden die Metriken sowohl auf Test als auch aiuf Trainingsdaten. so lässt sich ein Overfitting besser feststellen. Auch kann es sein, dass nicht alle Trainingsdaten am ende in unser Modell mit eingeflossen sind. Dies ist insbesondere dann der Fall, wenn wir das Training frühzeitig abbrechen, da die Genauigkeit und/oder der Loss wieder abnehmen.

Modelltraining

Beim Trainieren der Modelle hinterlegen wir einen Checkpoint, sowie einen TensorBoard Callback. Der Tensorboard callback erlaubt es uns, die Metriken des Trainings abzuspeichern und in Tensorboard nachträglich zu untersuchen. Der checkpoint Callback wiederum speichert nach jeder Epoche die Gewichte des Modells ab, sofern das Modell bessere Validierungs-Ergebnisse liefert. Am Ende des Durchlaufs können wir dann auf die Gewichte zurückgreifen, welche die besten Resultate erbracht haben.

Für das Training bestimmte Daten müssen durch das auskommentieren der entsprechenden Codezeilen ausgewählt werden

Resultate

Eine Grobe Übersicht über die trainierten Netze liefert Tensorboard. Hier können wir die Logs aller unserer trainierten Modelle einsehen. Eine vertiefte Einsicht bieten darüber hinaus die Metriken unserer Evaluation. Nachdem wir so unser bestes Modell ausgewählt haben, können wir es mit dem alternativen Ansatz vergleichen, bei dem RNN statt CNN genutz wurden.

Analyse in Tensorboard

Tensorboard erlaubt uns, wie bereits erwähnt, die Logs aller unserer Modelle einzusehen. Zusätzlich können wir die Logs der zum Vergleich trainierten RNN ebenfalls laden und so den Trainingsverlauf beider Netze direkt vergleichen.

Ein Blick auf den Validierungs-Loss

Beobachtet man der Verlauf des Validierungs-Loss beim Trainieren des Modells, so stellt man fest, dass dieser ab einem bestimmten Zeitpunkt wieder stark ansteigt. Im Normalfall ist dies ein klares Indiz für ein Overfitting. Allerdings bringt ein solches Overfitting generell einen Verlus an Validierungsgenauigkeit mit sich. Dies ist hier jedoch noicht der Fall. Im Gegenteil, die Genauigkeit steigt sogar teilweise noch an oder bleibt schlimmstenfalls stabil.

Woran liegt dies?

Der Ouput uunseres Modells ist ein Softmax. Das bedeutet, dass wir 4 ausgangswerte haben, welche normiert und aufsummiert den wert 1 ergeben. Somit können die outputwerte als Wahrscheinlichkeitswert interpretiert werden, mit dem das Modell seine Vorhersage trifft. In unserem Fall ist es nun so, dass das Modell im Verlauf des Trainings öfters richtige Vorhersagen trifft, diese Wahrscheinlichkeitswerte für die richtige Antwort allerdings sinken. Das Modell wird sich in seiner Antwort also "weniger sicher", obwohl die Genauigkeit steigt. eine schöner Erklärung findet sich auch in diesem Stackexchange Beitrag.

eine Möglichkeit, diesem Effekt entgegenzuwirken ist die Regularisierung. Durch das einfügen von Dropout-Layern konnte der effekt gedämpft und die Performance des Modells nochmal verbessert werden. Allerdings konnte der Anstieg des loss nie komplett unterbunden werdenn. Dies ist im Tensorboard gut sichtbar.

Vergleich der genutzten Daten

Vergleicht man die Trainingsverläufe der einzelnen Modell-Architekturen mit den unterschiedlich normalisierten Daten, so zeigt sich ganz klar ein Muster ab. Eine stärkere Normalisierung führt zu:

Somit wird deutlich, wie wichtig eine gute Normalisierung der Trainingsdaten ist und welchen weitreichenden Einfluss sie auf das Ergebnis des Modells hat.

Vergleich der CNN untereinander

Vergleichen wir die verschiedenen CNN untereinander, so wird schnell deutlich, dass Modell 4 was Performanceangeht die Nase vorn hat. Die genauen Metrikwerte sind im nächsten Abschnitt einsehbar.

Metrikwerte

Für die ausgewählten Metriken erreicht das Modell 4 folgende Werte:

Auf Trainingsdaten:

Accuracy: 0.9948

Konfusions Matrix:

Precision, Recall und F1-score für die Klassen:

class precision recall f1-score support
phone call 0.99 0.99 0.99 725
play with phone 1.00 1.00 1.00 725
taking a selfie 1.00 0.99 0.99 725
rest class 0.99 1.00 0.99 725

Precision Recall und F1-score im Schnitt:

Average Type precision recall f1-score support
micro avg 0.99 0.99 0.99 2900
macro avg 0.99 0.99 0.99 2900
weighted avg 0.99 0.99 0.99 2900
samples avg 0.99 0.99 0.99 2900

ROC Area under Curve Score: 0.9966

Auf Testdaten:

Accuracy: 0.8993

Konfusions Matrix:

Precision, Recall und F1-score für die Klassen:

class precision recall f1-score support
phone call 0.90 0.87 0.89 182
play with phone 0.93 0.93 0.93 181
taking a selfie 0.94 0.88 0.91 181
rest class 0.84 0.91 0.87 181

Precision Recall und F1-score im Schnitt:

Average Type precision recall f1-score support
micro avg 0.90 0.90 0.90 725
macro avg 0.90 0.90 0.90 725
weighted avg 0.90 0.90 0.90 725
samples avg 0.90 0.90 0.90 725

ROC Area under Curve Score: 0.9329

Cross View und Cross Subject Auswertung

Ebenfalls mit Modell 4

Für Cross View:

Accuracy: 0.9167

Konfusions Matrix:

Precision, Recall und F1-score für die Klassen:

class precision recall f1-score support
phone call 0.91 0.89 0.90 316
play with phone 0.93 0.94 0.94 316
taking a selfie 0.94 0.97 0.95 316
rest class 0.88 0.87 0.87 276

Precision Recall und F1-score im Schnitt:

Average Type precision recall f1-score support
micro avg 0.92 0.92 0.92 1224
macro avg 0.92 0.92 0.91 1224
weighted avg 0.92 0.92 0.92 1224
samples avg 0.92 0.92 0.92 1224

ROC Area under Curve Score: 0.9437

Für Cross Subject:

Accuracy: 0.8811

Konfusions Matrix:

Precision, Recall und F1-score für die Klassen:

class precision recall f1-score support
phone call 0.86 0.84 0.85 275
play with phone 0.89 0.93 0.91 275
taking a selfie 0.92 0.93 0.92 276
rest class 0.85 0.83 0.84 276

Precision Recall und F1-score im Schnitt:

Average Type precision recall f1-score support
micro avg 0.88 0.88 0.88 1102
macro avg 0.88 0.88 0.88 1102
weighted avg 0.88 0.88 0.88 1102
samples avg 0.88 0.88 0.88 1102

ROC Area under Curve Score: 0.9208

Interpretation der Metriken

Im normalen Train/Test Split

die Konfusionsmatriz zeigt deutlich, das die Restklasse die größte Herausforderung darstellt. Dies stellt insofern keine Überraschung dar, da die 3 Hauptaktionen recht unterschiedlicher Natur sind, die Restklasse hingegen Bewegungsabläufe enthält, die denen der Aktionen teilweise sehr ähnlich sind.

So sind "Hut absetzen" und "Wasser trinken" beispielsweise beide Aktionen, welche eine Bewegung der Hand zum Kopf hin beinhalten. Die gleiche oder eine ähnliche Bewegung findet sich jedoch auch bei der Aktion "phonecall" oder "taking a selfie".

"Klatschen" mit kurzen Handbewegungen ist auf Skelettebene wiederum leicht mit "Play with Phone" zu verwechseln.

Das Faltungsnetz ordnet somit teilweise Sequenzen fälschlicherweise der Restklasse zu.

Überraschen ist allerdings, wie oft "phonecall" und "play with phone" verwechselt werden. Dies ist auf die Tatsache zurückzuführen, dass vor der Aktion des Anrufens oft die vorher die Telephonnummer eingetippt wird. Diese scheinbar harmlose Information führt dazu, dass das Modell darin eine "play with phone" Aktion erkennt.

Cross View und Cross Subject

Hier zeigt sich eindeutig, dass das Problem der Cross View Klassifizierung bei weitem eine leichtere Aufgabe darstellt. Das Netz liefert jedoch bei beien Problemen eine zufriedenstellende Leistung. Anzumerken ist ebenfalls die Tatsache, dass eine gezielte Betrachtung des Cross Subject Problems eine niedrigere Vorhersagegenauigkeit ergibt als bei dem normalen Train/Test Split. Das Hauptproblem stellt jdeoch bei beiden Ansätzen weiterhin die Restklasse dar. Die Unterscheidung zwischen den 3 Hauptaktionen "play with phone", "take selfie" und "phonecall" ist weiterhin sehr zufriedenstellend. Die vorher festgestellten Verwechslungspotentiale bei den Aktiopnsklassen werden insbesondere bei Cross-Subject jedoch deutlicher.

Vergleich zu Rekurrenten Neuronalen Netzen

Übersicht der RNN

Auf die genaue Architektur des Rekurennten LLSTM Netzes werden wir in dieser Ausarbeitung nicht im Deteil eingehen. Hierfür empfielt sich die Lektüre der Arbeit von Miro Goettler, welcher jenen Teilbereich des Projektes übernommen hat.

Mit einer Parameteranzahl von 237,060 ist das Rekurrente Netz jedoch in einer Größenkategorie mit den entgültigen vorgestellten Faltungsnetzen.

Die Analyse der Logs in Tensorboard

Der Trainingsverlauf der RNN zeigt einen stetigeren, wenngleich auch langsameren Anstieg der Vorhersagegenauigkeit. Auch verzeichnet das Modell keinen Wiederanstieg beim Validierungs-Loss. Im Gegensatz zu den Faltungsnetzen scheinen die RNN zu Trainingsende noch kein Leistungs Plateau zu erreichen. Es könnte davon ausgegangen werden, dass eine höheren Anzahl an Trainingsdaten die Genauigkeit noch weiter ansteigen lassen würde.

Die Metriken der RNN

Die Metrikwerte für das am besten abschneidende RNN sehen wiefolgt aus:

Parameteranzahl: 237,060 Accuracy: 0.8715

Konfusions Matrix:

Precision, Recall und F1-score für die Klassen:

class precision recall f1-score support
phone call 0.82 0.85 0.84 181
play with phone 0.84 0.93 0.88 181
taking a selfie 0.94 0.90 0.92 181
rest class 0.90 0.80 0.85 181

Precision Recall und F1-score im Schnitt:

Average Type precision recall f1-score support
macro avg 0.87 0.87 0.87 724
weighted avg 0.87 0.87 0.87 724

ROC Area under Curve Score: 0.9723

Im Vergleich zur Konfusionsmatrix der Faltungsnetze springt ein Unterschied ins Auge. Während das Faltungsnetz öfters andere Aktionen fälschlicherweise der Restklasse zuordnet, verläuft dies beim RNN genau umgekehrt. So werden Sequenzen der Restklasse nicht als solche erkannt und eher den anderen Klassen zugewiesen, hauptsächlich den "phonecall" und "play with phone" Klassen.

Für Cross View und Cross Subject:

Cross View:

Accuracy: 0.8897

Cross Subject:

Accuracy: 0.8348

Vergleich der Metriken der Modelle

Parameteranzahl:

RNN: 237,060

CNN: 131,454

Accuracy:

CNN: 0.8993

RNN: 0.8715

class precision RNN precision CNN recall RNN recall CNN f1-score RNN f1-score CNN support
phone call 0.82 0.90 0.85 0.87 0.84 0.89 181
play with phone 0.84 0.93 0.93 0.93 0.88 0.93 181
taking a selfie 0.94 0.94 0.90 0.88 0.92 0.91 181
rest class 0.90 0.84 0.80 0.91 0.85 0.87 181

Precision Recall und F1-score im Schnitt:

Average Type precision RNN precision CNN recall RNN recall CNN f1-score RNN f1-score CNN support
macro avg 0.87 0.90 0.87 0.90 0.87 0.90 724
weighted avg 0.87 0.90 0.87 0.90 0.87 0.90 724

ROC Area under Curve Score:

CNN: 0.9329

RNN: 0.9723

Die vorherigen Festellungen scheinen sich im direkten Vergleich der Precision und Recall Werte zu bestätigen:

Im Mittel über die Klassen hinweg schneidet das Faltungsnetz bei Precision, Recall und somit auch dem F1-Score jedoch besser ab.

Beachtlich ist jedoch die Area Under Curve für die ROC! Im Multiklassen Verfahren werdenfür die Berechnung der ROC jeweils zwei Klassen miteinander verglichen und dann ein Mittelwert berechnet. So besagt ein hoher ROC in diesem Fall, dass das RNN prinzipiell besser zwischen 2 Aktionen unterscheiden kann als das CNN.

Cross View Accuracy

CNN: 0.9167

RNN: 0.8897

Cross Subject Accuracy

CNN: 0.8811

RNN: 0.8348

Die Precision Werte für Cross View und Cross Subject bestätigen eigentlich nur die vorherigen Metriken.

Fazit

Sowohl CNN als auch RNN eignen sich zur Erkennung von Bewegungsabläufen auf Skelettdaten. Einen enormen Vorteil bringt hierbei das korrekte Normalisieren der verwendeten Daten. Unterschiede der beiden NEtzstrukturen lassen sich beim Training der Netze beobachten. Hier trainieren die Faltungsnetze deutlich schneller! Allerdings scheint das Potential der Rekurrenten Netze nicht ganz ausngenutzt, da am Ende des Trainings im Gegensatz zu den CNN kein Leitsungsplateau erreicht wurde und kein Overfitting zu erkennen ist. Größte Schwachstelle der RNN scheint die Restklasse zu sein, welche sich aus gleichen Teilen anderer Bewegungsabläufe zusammensetzt. Hier ist die Eigenschaft der CNN, sehr schnell zu lernen, von Vorteil. Da die verschiedenen Bewegungen innherhalb Restklasse vergleichsweise wenig oft vertreten sind, kann das RNN diese nicht komplett erlernen und die Restklasse infolgedessen nur bedingt generalisieren.

Erwähnenswert ist jedoch die Tatsache, dass das Faltungsnetz mit knapp der Hälfte an trainierbaren Parametern auskommt und das Training für eine bessere Performance sogar vorzeitig abgebrochen wird. Das Faltugnsnetz nutzt somit nur einen Teil der potentiellen Trainingsdaten. Eine große Rolle bei der Lernrate des Netzes spielt höchswahrscheinlich auch die Anpassbarkeit der Faltungskerne. Vergleicht man die Resultate der 4 vorgestellten möglichen Architekturen so zeigt sich, wie viel die Form und Reihenfolge der Faltungskerne ausmachen kann.